fix(floating-rates): unique date picker ids and bindable datetime buttons in @for rows - #557
Conversation
E2E — mocked backend🎭 E2E Tests✅ All green — 364 passed · 0 failed · 1 skipped, across 30 spec files in 6m 55s. By spec file
All 365 tests — click to expand
Slowest 10 — what the shard counts should be tuned against
📼 Download the HTML report, videos and traces — see the Generated by run 35691514692 from |
E2E — real Fineract🎭 E2E Tests✅ All green — 78 passed · 0 failed · 0 skipped · 1 flaky, across 24 spec files in 6m 58s.
|
| Spec | ✅ | ❌ | ⏭️ | 🔒 | Time |
|---|---|---|---|---|---|
| backend.setup.ts | 3 | 0 | 0 | 0 | 6.3s |
| batch-api-operations.spec.ts | 5 | 0 | 0 | 0 | 28.4s |
| center-servicing.spec.ts | 2 | 0 | 0 | 0 | 23.1s |
| client-legal-form-search.spec.ts | 1 | 0 | 0 | 0 | 4.6s |
| client-transfer.spec.ts | 4 | 0 | 0 | 0 | 46.8s |
| deposit-account-servicing.spec.ts | 3 | 0 | 0 | 0 | 27.4s |
| deposit-product-configuration.spec.ts | 3 | 0 | 0 | 0 | 15.3s |
| group-membership.spec.ts | 3 | 0 | 0 | 0 | 47.8s |
| loan-account-actions.spec.ts | 3 | 0 | 0 | 0 | 23.9s |
| loan-charge-off.spec.ts | 2 | 0 | 0 | 0 | 23.0s |
| loan-product-accounting.spec.ts | 1 | 0 | 0 | 0 | 31.9s |
| loan-servicing.spec.ts | 2 | 0 | 0 | 0 | 19.2s |
| login.spec.ts | 4 | 0 | 0 | 0 | 5.5s |
| parity-screens.spec.ts | 8 | 0 | 0 | 0 | 43.7s |
| rbac-backend-restricted-user.spec.ts | 7 | 0 | 0 | 0 | 34.6s |
| rbac-multi-permission.spec.ts | 9 | 0 | 0 | 0 | 54.8s |
| full-demo.spec.ts | 1 | 0 | 0 | 0 | 1m 6s |
| loan-lifecycle.spec.ts | 4 | 0 | 0 | 0 | 2m 7s |
| loan-schedule-type.spec.ts | 3 | 0 | 0 | 0 | 35.7s |
| report-parameter-backend.spec.ts | 4 | 0 | 0 | 0 | 22.4s |
| savings-transaction-correction.spec.ts | 1 | 0 | 0 | 0 | 6.8s |
| share-account-servicing.spec.ts | 2 | 0 | 0 | 0 | 19.2s |
| share-product-accounting.spec.ts | 1 | 0 | 0 | 0 | 24.2s |
| teller-cash-management.spec.ts | 2 | 0 | 0 | 0 | 35.5s |
All 78 tests — click to expand
backend.setup.ts
- ✅ seed backend reference data —
2.3s - ✅ seed backend reference data —
2.0s - ✅ seed backend reference data —
2.0s
batch-api-operations.spec.ts
- ✅ Batch API Operations against Fineract › runs the sample batch scenario — create client, create loan, add and read back a charge —
6.2s - ✅ Batch API Operations against Fineract › shows a parse error instead of submitting when the batch input is not valid JSON —
7.9s - ✅ Batch API enclosingTransaction semantics against Fineract › rolls back the earlier steps when enclosingTransaction is true and a later step fails —
4.8s - ✅ Batch API enclosingTransaction semantics against Fineract › does not roll back the earlier steps when enclosingTransaction is false and a later step fails —
5.2s - ✅ Batch API Operations on a mobile viewport against Fineract › the sample batch scenario is reachable and works by touch at mobile width —
4.5s
center-servicing.spec.ts
- ✅ Center servicing › a center is activated, staffed and given a group —
17.4s(retried 1×) - ✅ Center servicing › notes are recorded against the center —
5.7s
client-legal-form-search.spec.ts
- ✅ Client list: legal form filtering › an entity client appears in the main client list —
4.6s
client-transfer.spec.ts
- ✅ Client transfer between offices › a proposed transfer is held until the destination accepts, and then the client moves —
11.9s - ✅ Client transfer between offices › a rejected transfer leaves the client on hold, and withdrawing is the way back —
12.7s - ✅ Client transfer between offices › a client can be transferred in one step when the user may act for both offices —
11.0s - ✅ Client staff assignment › an officer can be assigned and then removed —
11.1s
deposit-account-servicing.spec.ts
- ✅ Term deposit account servicing › an account is approved, activated and closed before maturity —
11.9s - ✅ Term deposit account servicing › a deposit is recorded, listed, and reversed without leaving the list —
9.3s - ✅ Term deposit account servicing › an application can be rejected instead of approved —
6.2s
deposit-product-configuration.spec.ts
- ✅ Deposit product configuration › a fixed deposit product survives being edited —
5.0s - ✅ Deposit product configuration › a recurring deposit product can be created at all —
5.2s - ✅ Deposit product configuration › a savings product carries its accounting configuration —
5.1s
group-membership.spec.ts
- ✅ Group membership and lifecycle › a group is activated, staffed, given members and a committee, then emptied —
20.3s - ✅ Group membership and lifecycle › notes are recorded against the group and can be removed again —
8.4s - ✅ Group membership and lifecycle › an empty group is closed with a reason, and a group with members is refused —
19.1s
loan-account-actions.spec.ts
- ✅ Loan account lifecycle actions › new action menu items appear only for active loans —
6.8s - ✅ Loan account lifecycle actions › undo disbursal shows a confirm dialog and reverts the loan to Approved —
9.2s - ✅ Loan account lifecycle actions › write off requires confirmation and moves the loan out of Active status —
7.9s
loan-charge-off.spec.ts
- ✅ Loan servicing commands › charges a loan off through the UI and reverses it —
10.4s - ✅ Loan servicing commands › records a goodwill credit through the shared transaction form —
12.5s
loan-product-accounting.spec.ts
- ✅ Loan product accounting › a cash-accounting product is configured, round-trips on edit, and posts to the ledger —
31.9s
loan-servicing.spec.ts
- ✅ Loan servicing: notes and transaction adjustment › notes can be added and removed, with a confirm dialog on delete —
8.9s - ✅ Loan servicing: notes and transaction adjustment › a repayment transaction can be viewed and adjusted with a corrected amount —
10.3s
login.spec.ts
- ✅ Login › login page displays correctly —
1.4s - ✅ Login › login form has required fields —
1.4s - ✅ Login › submit button is disabled when form is empty —
1.4s - ✅ Login › submit button is enabled when form is filled —
1.4s
parity-screens.spec.ts
- ✅ Screens added for platform parity › a manual journal entry can be read whole and reversed —
6.5s - ✅ Screens added for platform parity › an entry that is already reversed is not offered again —
4.5s - ✅ Screens added for platform parity › a report definition can be created, edited and deleted; a core one cannot —
5.7s - ✅ Screens added for platform parity › a core report opens read-only with only its in-use setting —
4.4s - ✅ Screens added for platform parity › a pending loan is approved from the queue, in a batch —
6.5s - ✅ Screens added for platform parity › a fixed deposit is listed as a deposit, not as a savings account —
5.0s - ✅ Screens added for platform parity › an office has a screen, and it carries its custom fields —
4.9s - ✅ Screens added for platform parity › a savings account carries notes, and the note survives a reload —
6.2s
rbac-backend-restricted-user.spec.ts
- ✅ a genuinely restricted Fineract user › holds exactly the permissions their role was granted —
256ms - ✅ a genuinely restricted Fineract user › reaches the screen their permission covers —
4.9s - ✅ a genuinely restricted Fineract user › is refused a screen their permission does not cover, by URL and by the backend —
4.6s - ✅ a genuinely restricted Fineract user › is refused a write screen they can read the list for, and the write itself —
6.6s - ✅ a genuinely restricted Fineract user › is not offered the actions it would be refused for —
3.9s - ✅ a genuinely restricted Fineract user › is shown an action it cannot take, disabled and saying what it needs —
6.2s - ✅ a genuinely restricted Fineract user › the superuser the rest of the suite uses is unaffected —
8.1s
rbac-multi-permission.spec.ts
- ✅ a route declaring more than one permission code (OR semantics) › is admitted by either declared code alone —
5.4s - ✅ a route declaring more than one permission code (OR semantics) › is admitted by the other declared code alone —
4.3s - ✅ a route declaring more than one permission code (OR semantics) › is refused when holding neither declared code, by the router and by the backend —
5.0s - ✅ ALL_FUNCTIONS_READ, against the real Fineract permission catalogue › reaches read screens across modules it holds no specific code for —
8.1s - ✅ ALL_FUNCTIONS_READ, against the real Fineract permission catalogue › is refused every write screen, and the writes themselves —
7.4s - ✅ a restricted session across a real page reload › keeps the same permission boundary after reloading, not just after a fresh login —
9.3s - ✅ a second real action-level gate, distinct from loan repayment › is shown the Approve action disabled and naming what it needs, refused by the backend too —
5.1s - ✅ Security module writes (users, roles), against the real backend › reaches the list screens but is refused the write screens —
9.9s - ✅ Security module writes (users, roles), against the real backend › is refused creating a user and modifying a role, by the backend itself —
277ms
full-demo.spec.ts
- ✅ Full feature demo recording › walk through loan schedule type, lifecycle, custom fields, collateral, and disbursement —
1m 6s
loan-lifecycle.spec.ts
- ✅ Loan lifecycle: creation, approval, disbursement › create, approve, and disburse a Cumulative loan —
33.4s - ✅ Loan lifecycle: creation, approval, disbursement › create, approve, and disburse a Progressive loan —
34.0s - ✅ Loan lifecycle: creation, approval, disbursement › an approved loan can be returned to pending approval —
30.4s - ✅ Loan lifecycle: creation, approval, disbursement › the delinquency tab reads a real loan, and the empty data tabs stay hidden —
28.9s
loan-schedule-type.spec.ts
- ✅ Loan Schedule Type (Cumulative vs Progressive) › loan products list shows a schedule type chip per product —
9.2s - ✅ Loan Schedule Type (Cumulative vs Progressive) › create a Progressive loan product end-to-end and verify it round-trips —
15.6s - ✅ Loan Schedule Type (Cumulative vs Progressive) › loan creation shows the schedule type badge for a Progressive product —
10.8s
report-parameter-backend.spec.ts
- ✅ Dynamic report parameters against Fineract › keeps the parameter form available when a report has cascading lookups —
5.0s - ✅ Dynamic report parameters against Fineract › changing Office changes the Client Listing row set —
6.1s - ✅ Cascading report parameters against Fineract › sends the parent value to the child lookup and clears the child when it changes —
7.3s - ✅ Chart reports against Fineract › renders a chart report as a chart rather than a table —
4.0s
savings-transaction-correction.spec.ts
- ✅ Savings transaction correction › a deposit is reversed and a hold is released —
6.8s
share-account-servicing.spec.ts
- ✅ Share account servicing › an account is approved, activated, traded and closed —
13.1s - ✅ Share account servicing › an application can be rejected —
6.2s
share-product-accounting.spec.ts
- ✅ Share product accounting › a share product is mapped to equity and round-trips on edit —
24.2s
teller-cash-management.spec.ts
- ✅ Teller cash management › a cashier is listed, receives an allocation, and settles cash back —
23.7s - ✅ Teller cash management › settling more than the cashier holds is refused and the form stays usable —
11.8s
Slowest 10 — what the shard counts should be tuned against
| Test | Spec | Time |
|---|---|---|
| Full feature demo recording › walk through loan schedule type, lifecycle, custom fields, collateral, and disbursement | full-demo.spec.ts |
1m 6s |
| Loan lifecycle: creation, approval, disbursement › create, approve, and disburse a Progressive loan | loan-lifecycle.spec.ts |
34.0s |
| Loan lifecycle: creation, approval, disbursement › create, approve, and disburse a Cumulative loan | loan-lifecycle.spec.ts |
33.4s |
| Loan product accounting › a cash-accounting product is configured, round-trips on edit, and posts to the ledger | loan-product-accounting.spec.ts |
31.9s |
| Loan lifecycle: creation, approval, disbursement › an approved loan can be returned to pending approval | loan-lifecycle.spec.ts |
30.4s |
| Loan lifecycle: creation, approval, disbursement › the delinquency tab reads a real loan, and the empty data tabs stay hidden | loan-lifecycle.spec.ts |
28.9s |
| Share product accounting › a share product is mapped to equity and round-trips on edit | share-product-accounting.spec.ts |
24.2s |
| Teller cash management › a cashier is listed, receives an allocation, and settles cash back | teller-cash-management.spec.ts |
23.7s |
| Group membership and lifecycle › a group is activated, staffed, given members and a committee, then emptied | group-membership.spec.ts |
20.3s |
| Group membership and lifecycle › an empty group is closed with a reason, and a group with members is refused | group-membership.spec.ts |
19.1s |
📼 Download the HTML report, videos and traces — see the playwright-report-backend artifact.
Generated by run 35691514692 from b01b1ac. The run executed a fork branch, so treat its contents as unverified.
|
@cestercian are you working on this? |
|
@Aman-Mittal yep — PR is up and E2E is green. just fixing the Verified commit signatures so it can merge, then it's ready for review. |
Period rows created by Add Period shared one picker id and the ion-datetime-button initialized before its ion-datetime existed. Defer each button relative to its own row and give every picker a unique id. Fixes apache#548
ion-datetime cannot parse a Date's locale string, so a bound picker still rendered blank. Store each period's fromDate as YYYY-MM-DD.
2e90367 to
b01b1ac
Compare
|
@Aman-Mittal Verified signatures are fixed now — ready for review whenever you are. |
/home/runner/work/fineract-backoffice-ui/fineract-backoffice-ui/src/app/shared/components/deferred-datetime-button/deferred-datetime-button.component.ts |
|
@Aman-Mittal fixing the ADR 0005 lint now — will swap |
The wrapper imports IonDatetimeButton, which local/no-vendor-ui-import rejects outside src/app/ui. Naming Ionic is the primitive's job, not the feature's; move the component and its test into the ui/ boundary and update its one consumer's import path. No behaviour change.
|
@Aman-Mittal ADR 0005 lint fixed — moved |
Summary
Date pickers created inside
@forshared one ID and never bound. Each rate-period row now gets a unique picker id, and a deferredion-datetime-buttonwaits until its picker is in the DOM before stampingdatetime. Period dates are stored asYYYY-MM-DDso the bound button shows a date.Fixes #548
Test plan